package com.test.value;

/**
 * PropertyValue 类用于表示一个属性及其对应的值。
 * 该类封装了属性的名称和值，提供了设置和获取属性名称的方法。
 * 主要用于存储和管理软件应用中的可配置属性。
 */
public class PropertyValue {
    // 属性名称，用于标识该属性
    private String name;
    // 属性值，可以是任意数据类型
    private Object value;
    // 经过转换后的属性值，用于存储转换后的属性值
    private Object convertedValue;

    /**
     * 构造一个 PropertyValue 对象，指定属性名称和值。
     *
     * @param name  属性的名称，用于标识该属性
     * @param value 属性的值，可以是任意数据类型
     */
    public PropertyValue(String name, Object value) {
        this.name = name;
        this.value = value;
    }

    /**
     * 获取经过转换后的属性值。
     * 此方法目前直接返回原始值，但将来可能会根据需要添加转换逻辑。
     *
     * @return 经过转换后的属性值
     */
    public Object getConvertedValue() {
        return (this.value != null ? this.convertedValue : this.value);
    }

    public PropertyValue orElseThrow() {
        if (this.value == null) {
            throw new IllegalStateException("Property value is null");
        }
        return this;
    }


    /**
     * 获取属性的名称。
     *
     * @return 属性的名称
     */
    public String getName() {
        return name;
    }

    /**
     * 设置属性的名称。
     *
     * @param name 要设置的属性名称
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取属性的值。
     *
     * @return 属性的值，可以是任意数据类型
     */
    public Object getValue() {
        return value;
    }

    /**
     * 设置属性的值。
     *
     * @param value 要设置的属性值，可以是任意数据类型
     */
    public void setValue(Object value) {
        this.value = value;
    }


    public void setConvertedValue(String convertedValue) {
        this.convertedValue = convertedValue;
    }
}
